#pragma once
#include <fstream>
#include <iostream>
#include <string>
// 读取文件的一个工具模块
class Util {
public:
    static bool ReadFileContent(const std::string& filename, std::string* out) {
        // versino1:默认是以文本的形式读取文件的，但是图片是二进制的，所以我们这里要更新成二进制的读取方式
        // std::ifstream in(filename);
        // if(!in.is_open()) {
        //     return false;
        // }
        // std::string line;
        // while(std::getline(in, line)) {
        //     *out += line; 
        // }
        // in.close();
        // return true;
        // version2: 以二进制的方式进行内容的读取
        int filesize = FileSize(filename);
        if(filesize > 0) {
            std::ifstream in(filename);
            if(!in.is_open()) {
                return false;
            }
            out->resize(filesize);
            in.read((char*)out->c_str(), filesize);
            in.close();
            return true;
        }else {
            return false;
        }
    }
    static bool ReadOneLine(std::string& str, std::string* out, const std::string& sep) {
        auto pos = str.find(sep);
        if(pos == std::string::npos) {
            return false;
        }
        *out += str.substr(0, pos);
        str.erase(0, pos + sep.size());
        return true;
    }
    static int FileSize(const std::string& filename) {
        std::ifstream in(filename, std::ios::binary); // 以二进制的方式打开文件
        if(!in.is_open()) {
            return -1;
        }
        in.seekg(0, in.end); // 读取位置挪到文件的额末尾处
        int filesize = in.tellg(); // 获取当前位置
        in.seekg(0, in.beg);
        in.close();
        return filesize;
    }
};